home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
TCL1
/
DYNAMICA
/
CBIG2D.C
next >
Wrap
Text File
|
1990-07-01
|
4KB
|
156 lines
/******************************************************************************
CBig2D.c
******************************************************************************/
#include "::ErksObjects:CBig2D.h"
/*---------------------------------------------------------------------------*/
void CBig2D::IBig2D(void)
{
/*-- Set Array mapping data to all zeros --*/
amf.nXLimit = amf.nYLimit = amf.nElementSize = 0;
}
/*---------------------------------------------------------------------------*/
Boolean CBig2D::CreateData(int nXMax,int nYMax,int nElementSizeIn,Handle hDataIn)
{
amf.nXLimit = nXMax; amf.nYLimit = nYMax;
amf.nElementSize = nElementSizeIn;
if (hDataIn == NULL) {
gApplication->RequestMemory(FALSE, TRUE);
hData = NewHandleClear((long) amf.nElementSize * (long) amf.nXLimit * (long) amf.nYLimit);
gApplication->RequestMemory(FALSE, TRUE);
}
else
hData = hDataIn;
if (hData == NULL) return FALSE; /* Erk: Display Error Message !!! */
return TRUE;
}
/*---------------------------------------------------------------------------*/
void CBig2D::Dispose(void) /* OVERRIDE */
{
if (hData != NULL) DisposHandle(hData);
inherited::Dispose();
}
/*---------------------------------------------------------------------------*/
void CBig2D::GetValue(int nX,int nY,char *pDestination)
{
register char *pData;
register int i;
HLock(hData);
pData= (char *) *hData;
pData += Offset(nX,nY);
for (i=0; i < amf.nElementSize; ++i)
*pDestination++ = *pData++;
HUnlock(hData);
return;
}
/*---------------------------------------------------------------------------*/
void CBig2D::SetValue(int nX,int nY,char *pSource)
{
register char *pData;
register int i;
HLock(hData);
pData= (char *) *hData;
pData += Offset(nX,nY);
for (i=0; i < amf.nElementSize; ++i)
*pData++ = *pSource++;
HUnlock(hData);
return;
}
/*---------------------------------------------------------------------------*/
OSErr CBig2D::SaveData(CDataFile *datafile)
{
AMFData2D amfLocal; /* Used to avoid implicit dereferencing errors */
OSErr nError;
long lDataSize;
/*-- Write array mapping data --*/
amfLocal = amf;
nError = datafile->WriteSome((char *) &amfLocal,(long) sizeof(AMFData2D));
if (nError != NoErr) return nError;
/*-- Write array --*/
lDataSize = (long) GetHandleSize(hData);
HLock(hData);
nError = datafile->WriteSome((char *) *hData, lDataSize);
HUnlock(hData);
return nError;
}
/*---------------------------------------------------------------------------*/
OSErr CBig2D::LoadData(CDataFile *datafile)
{
AMFData2D amfLocal; /* Used to avoid implicit dereferencing errors */
OSErr nError;
long nHandleSize;
/*-- Read array mapping data --*/
nError = datafile->ReadSome((char *) &amfLocal, (long) sizeof(AMFData2D));
if (nError != NoErr) return nError;
amf = amfLocal;
/*-- Allocate Array --*/
nHandleSize = (long) amf.nElementSize * (long) amf.nXLimit * (long) amf.nYLimit;
gApplication->RequestMemory(FALSE, TRUE);
hData = NewHandle(nHandleSize);
gApplication->RequestMemory(FALSE, FALSE);
if (hData == NULL) return MemError();
/*-- Read array --*/
HLock(hData);
nError = datafile->ReadSome((char *) *hData,nHandleSize);
HUnlock(hData);
return nError;
}
/*---------------------------------------------------------------------------*/
void CBig2D::GetDimensions(int *nX, int *nY,int *nElementSizeOut)
{
*nX = amf.nXLimit;
*nY = amf.nYLimit;
*nElementSizeOut = amf.nElementSize;
}
/*---------------------------------------------------------------------------*/
Handle CBig2D::GetData(void)
{
return hData;
}
/*---------------------------------------------------------------------------*/
long CBig2D::Offset(int nX,int nY)
{
return ((long) nY * (long) amf.nXLimit + (long) nX) * (long) amf.nElementSize;
}
/*---------------------------------------------------------------------------*/